package com.gccloud.design.dao;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.gccloud.design.entity.BwpActivityRepoEntity;
import com.gccloud.design.entity.OptButtonBranchEntity;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;
import java.util.Map;

/**
 * @author 冯海琴
 */
@Mapper
public interface LinkComponentsDao extends BaseMapper<BwpActivityRepoEntity> {

    /**
     * 查询树数据，获取业务类型
     *
     * @return 列表
     */
    List<Map<String, Object>> getDataByParentId();

    /**
     * 查询环节组件
     *
     * @param repoId         环节库标识
     * @param activityName   环节名称
     * @param activityType   环节类型
     * @param businessTypeId 环节类型标识
     * @return 列表
     */
    List<BwpActivityRepoEntity> getDataList(String repoId, String activityName, String activityType, Integer businessTypeId, Page<BwpActivityRepoEntity> page);

    /**
     * 查询环节绑定操作-通过repoId查询出操作列表
     *
     * @param repoId 环节库标识
     * @return 操作名称
     */
    String getOperation(@Param("repoId") String repoId);

    /**
     * 查询环节绑定操作
     *
     * @param id 操作按钮分支标识
     * @return 操作按钮分支表
     */
    OptButtonBranchEntity getBind(String id);

    /**
     * 获取执行逻辑和补偿逻辑
     *
     * @param type 类型
     * @return 列表
     */
    List<Map<String, Object>> getMethod(String type);

    /**
     * 新增操作
     *
     * @param bwpActivityRepoEntity 环节库实体
     * @return 数量
     */
    int addActivityRepo(@Param("bwpActivityRepoEntity") BwpActivityRepoEntity bwpActivityRepoEntity);

    /**
     * 修改操作
     *
     * @param bwpActivityRepoEntity 环节库实体
     * @return 数量
     */
    int updateActivityRepo(@Param("bwpBusinessTypeDto") BwpActivityRepoEntity bwpActivityRepoEntity);

    /**
     * 批量删除环节组件
     *
     * @param id 环节库实体标识
     * @return 数量
     */
    int batchDelete(String id);

    /**
     * 绑定弹窗查询-通过repoId查出businessTypeId
     *
     * @param repoId 环节库实体标识
     * @return 数量
     */
    Integer getBusinessTypeId(String repoId);

    /**
     * 绑定查询
     *
     * @param businessTypeId 业务类型标识
     * @param optBranchCode  操作分支编码
     * @param optBranchName  操作分支名称
     * @return 列表
     */
    List<OptButtonBranchEntity> getBindList(Integer businessTypeId, String optBranchCode, String optBranchName, Page<OptButtonBranchEntity> page);

    /**
     * 查出所有绑定Id
     *
     * @return 列表
     */
    List<Long> getOperationId();

    /**
     * 绑定环节操作
     *
     * @param repoId 环节库实体标识
     * @param json   环节库实体
     * @return 数量
     */
    int updateActivity(String repoId, String json);


    /**
     * 获取页面模板
     *
     * @param businessTypeId 业务类型标识
     * @return 列表
     */
    List<Map<String, Object>> getForm(Integer businessTypeId);


    /**
     * 选择模板
     *
     * @param repoId 环节库实体标识
     * @param id     主键
     * @return 数量
     */
    int addFormId(String repoId, Integer id);

}
